// 封装队列类
function Queue() {
  // 属性
  this.items = [];

  // 队列相关操作方法
  // 1. 将元素加入到队列中
  Queue.prototype.enqueue = (element) => this.items.push(element);
  // 2. 在队列中删除前端元素
  Queue.prototype.dequeue = () => this.items.shift();
  // 3. 查看前端元素
  Queue.prototype.front = () => this.items[0];
  // 4. 查看队列是否为空
  Queue.prototype.isEmpty = () => !this.items.length;
  // 5. toString方法
  Queue.prototype.toString = () => {
    let resultString = "";
    for (let i = 0; i < this.items.length; i++) {
      resultString += this.items[i] + " ";
    }
    return resultString;
  };
  // 6. 查看队列长度
  Queue.prototype.size = () => this.items.length;
}

// 面试题: 击鼓传花
// num:       多少人淘汰一次
// nameList:  所有名称组合的列表
function passGame(nameList, num) {
  // 1. 创建一个队列 将列表加入到队列之中
  const queue = new Queue();
  nameList.forEach(element => {
    queue.enqueue(element);
  });

  // 2. 处理队列数据 淘汰num对应的人 直至剩下一个
  while (queue.size() > 1) {
    for (let i = 1; i < num; i++) {
      // 这里面是处理num前面的人 没有到num 所以自动移到队列后面
      queue.enqueue(queue.dequeue());
    }
    // 这个是num所选中的人 淘汰掉
    queue.dequeue()
  }

  // 3. 返回最后胜利的人
  return queue.front();
}

let name = passGame(["Mr.Ming", "Mr.Lei", "LiLei", "codewhy", "Tom", "Test"], 3);
console.log(name);

